package com.dimples.system.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.dimples.system.entity.SysMenu;

import java.util.List;

import cn.hutool.core.lang.tree.Tree;

/**
 * @author zhongyj <1126834403@qq.com><br/>
 * @date 2021/6/25
 */
public interface SysMenuService extends IService<SysMenu> {


    /**
     * 查询用户权限
     *
     * @param username 用户名
     * @return 权限集合
     */
    List<String> findUserPermissions(String username);

    /**
     * 获取用户菜单
     *
     * @param username 用户名
     * @return 树形菜单
     */
    Object findMenuByUsername(String username);

    /**
     * 获取菜单
     *
     * @return List<SysMenu>
     */
    List<SysMenu> findMenu();

    /**
     * 根据id获取菜单
     *
     * @param menuId Long
     * @return SysMenu
     */
    SysMenu findMenuById(Long menuId);

    /**
     * 获取树形菜单
     *
     * @param virtualNode boolean
     * @return List<Tree < Long>>
     */
    List<Tree<Long>> findMenuTree(boolean virtualNode);

    /**
     * 获取角色树形菜单
     *
     * @param roleId Long
     * @return List<Tree < Long>>
     */
    List<Tree<Long>> findMenuTreeByRoleId(Long roleId);

    /**
     * 根据角色id获取菜单
     * @param roleId Long
     * @return List<SysMenu>
     */
    List<SysMenu> findMenuByRoleId(Long roleId);

    /**
     * 根据id更新菜单
     *
     * @param menuId SysMenu
     */
    void updateMenuById(SysMenu menuId);

    /**
     * 根据id删除菜单
     *
     * @param menuId Long
     */
    void deleteMenuById(Long menuId);

    /**
     * 批量删除菜单
     *
     * @param menuIds String
     */
    void deleteBatchMenuById(String menuIds);

    /**
     * 新增菜单
     *
     * @param sysMenu SysMenu
     */
    void saveMenu(SysMenu sysMenu);

}
